from django.shortcuts import render
from rest_framework.views import APIView
# Create your views here.
from rest_framework.permissions import IsAuthenticated
from django_redis import get_redis_connection
from goods.models import SKU
from .serializers import CartSKUSerializer
from rest_framework.response import Response
from decimal import Decimal
from .serializers import PlaceOrderSerializer


class PlaceOrderView(APIView):

    """
        GET orders/xxx
        １．这个页面必须是登陆页面
        ２．根据登陆用户的信息，获取购物车的数据
        ３．购物车的数据保存在redis中
        ４．我们获取选中的商品的数据
        ５．根据id获取商品的详细信息
    """
    # 这个页面必须是登陆用户
    permission_classes = [IsAuthenticated]

    def get(self,request):

        # 获取登录用户的信息
        user = request.user
        # 在redis中获取购物车的数据
        redis_conn = get_redis_connection('cart')
        # 获取hash数据
        redis_cart = redis_conn.hgetall('cart_%s'%user.id)
        # 获取set中的选中的商品的id
        redis_selected_ids = redis_conn.smembers('cart_selected_%s'%user.id)
        # 获取选中的商品的信息
        cart = {}
        for sku_id in redis_selected_ids:
            cart[int(sku_id)] = int(redis_cart[sku_id])  # 添加商品的购买数量

        ids = cart.keys()

        skus = SKU.objects.filter(pk__in=ids)
        for sku in skus:
            sku.count = cart[sku.id]

        # serializer = CartSKUSerializer(skus,many=True)
        #
        # return Response(serializer.data)

        freight = Decimal('100.00')

        serializer = PlaceOrderSerializer({'freight':freight,'skus':skus})

        return Response(serializer.data)


from .serializers import CreateOrderSerializer

class CreateOrderView(APIView):
    """
        分析：
        １．必须是登录用户才能访问当前页面
        ２．前端必须把收货地址，支付方式，以及商品信息传递给后端
        ３．对数据进行检验
        ４．生成订单信息
        ５．对订单信息进行保存
    """
    permission_classes = [IsAuthenticated]


    def post(self,request):

        serializer = CreateOrderSerializer(data=request.data,context={'request':request})

        serializer.is_valid(raise_exception=True)

        serializer.save()

        return Response(serializer.data)







